Register Usage Conventions
Assume Function A calls Function B. Then A is the caller and B is the callee.
| Register | Convention | Callee or Caller Owned? |
|---|---|---|
| a | return value | callee owned |
| b | local variable | caller owned |
| c | 4th argument | callee owned |
| d | 3rd argument | callee owned |
| si | 2nd argument | callee owned |
| di | 1st argument | callee owned |
| bp | local var | caller owned |
| sp | stack pointer | caller owned |
| r8 | 5th argument | callee owned |
| r9 | 6th argument | callee owned |
| r10 | scratch/temp | callee owned |
| r11 | scratch/temp | callee owned |
| r12 | local var | caller owned |
| r13 | local var | caller owned |
| r14 | local var | caller owned |
| r15 | local var | caller owned |
Notes
- Callee Owned / Caller Saved / Call Clobbered – used for temporary quantities.
- Caller Owned / Caller Saved / Call Preserved – used for values needed across calls.